22장. 로컬 LLM 실행 환경 만들기
1. 로컬 AI를 직접 실행해보기
앞 장에서는 로컬 AI를 쓰는 이유를 살펴보았다.
로컬 AI는 AI 모델을 외부 클라우드 API로 호출하지 않고,
개발 PC나 사내 서버처럼 우리가 관리하는 환경에서 직접 실행하는 방식이다.
로컬 AI를 쓰는 이유는 여러 가지가 있다.
- 민감한 데이터를 외부로 보내지 않기 위해
- 반복 작업의 비용을 줄이기 위해
- 인터넷 없이 동작하는 AI가 필요해서
- 사내망 안에서 AI 기능을 제공하기 위해
- 클라우드 AI 장애 시 fallback으로 사용하기 위해
하지만 개념만 이해해서는 감이 잘 오지 않는다.
로컬 AI는 직접 실행해보는 것이 가장 빠르다.
이번 장에서는 개발자가 로컬 LLM을 실행하는 대표적인 방법을 살펴본다.
- Ollama
- LM Studio
- llama.cpp
- 로컬 모델 API 서버
이 장의 목적은 특정 도구의 모든 옵션을 외우는 것이 아니다.
로컬 LLM 실행 환경이 어떤 구조로 동작하는지 이해하는 것이다.
로컬 LLM을 실행하면 기본 흐름은 다음과 같다.
모델 다운로드
→ 로컬에서 모델 실행
→ 터미널 또는 GUI에서 질문
→ 필요하면 API 서버로 호출
→ 내 애플리케이션과 연동
처음에는 개인 PC에서 작은 모델을 실행해보고,
이후에 내부 서버나 API 형태로 확장하는 방식이 좋다.
2. 로컬 LLM 실행 구조 이해하기
클라우드 AI를 사용할 때는 모델이 외부 클라우드에 있다.
우리 서비스
→ 클라우드 AI API
→ 클라우드의 AI 모델
→ 응답 반환
로컬 LLM은 모델이 내 환경 안에 있다.
우리 서비스
→ 로컬 LLM 서버
→ 로컬 모델 실행
→ 응답 반환
개발 PC에서 실행한다면 다음과 같다.
내 노트북
→ Ollama 또는 LM Studio 실행
→ 로컬 모델 로드
→ 질문 입력
→ 답변 생성
사내 서버에서 실행한다면 다음처럼 볼 수 있다.
사내 백엔드 서비스
→ 내부 LLM API 서버
→ GPU 서버의 로컬 모델
→ 답변 반환
로컬 LLM 실행 환경에는 보통 다음 요소가 있다.
| 구성 요소 | 역할 |
|---|---|
| 모델 파일 | LLM 자체의 가중치 파일 |
| 실행 엔진 | 모델을 메모리에 올리고 추론을 수행하는 프로그램 |
| 인터페이스 | 터미널, GUI, HTTP API 등 사용자가 호출하는 방식 |
| 하드웨어 | CPU, RAM, GPU, VRAM |
| 애플리케이션 | 로컬 모델을 호출하는 서비스 코드 |
여기서 모델 파일은 AI의 두뇌에 해당한다.
실행 엔진은 그 모델을 실제로 돌리는 프로그램이다.
예를 들어 Ollama는 모델 다운로드, 실행, API 제공을 편하게 해주는 도구다.
LM Studio는 GUI 환경에서 모델을 내려받고 테스트하기 쉽게 해준다.
llama.cpp는 비교적 낮은 수준에서 Llama 계열 모델을 실행할 수 있게 해주는 오픈소스 프로젝트다.
추론은 학습된 AI 모델에 입력을 넣고 결과를 생성하는 과정이다.
로컬 LLM 실행은 대부분 “모델을 학습시키는 것”이 아니라 “이미 학습된 모델로 추론하는 것”이다.
3. 로컬 LLM 실행 전에 확인할 것
로컬 LLM을 실행하기 전에 자신의 환경을 확인해야 한다.
가장 중요한 것은 하드웨어다.
- CPU
- RAM
- GPU
- VRAM
- 저장공간
작은 모델은 CPU만으로도 실행할 수 있다.
하지만 응답 속도가 느릴 수 있다.
GPU를 사용하면 훨씬 빠르게 답변을 생성할 수 있다.
다만 GPU의 VRAM이 충분해야 한다.
CPU 실행:
설치와 테스트는 가능하지만 느릴 수 있음
GPU 실행:
속도가 빠르지만 VRAM 용량이 중요함
RAM 부족:
모델 로드가 어렵거나 시스템이 느려질 수 있음
저장공간 부족:
모델 파일을 내려받을 수 없음
모델 크기도 확인해야 한다.
LLM 이름에 자주 붙는 7B, 8B, 14B, 32B 같은 표현은 모델의 파라미터 수를 의미한다.
7B:
약 70억 개 파라미터
14B:
약 140억 개 파라미터
32B:
약 320억 개 파라미터
파라미터가 많을수록 모델이 더 많은 표현력을 가질 수 있지만, 실행에 필요한 메모리도 증가한다.
파라미터는 모델이 학습 과정에서 얻은 내부 숫자 값이다.
모델이 문장을 이해하고 생성하는 데 사용하는 가중치라고 볼 수 있다.
초보자가 처음 실행할 때는 너무 큰 모델보다 작은 모델부터 시작하는 것이 좋다.
처음 테스트:
7B 또는 8B급 모델
성능 비교:
14B급 모델
고성능 실험:
32B 이상 모델
운영 검토:
하드웨어, 동시 요청, 응답 속도까지 함께 측정
모델을 선택할 때는 한국어 성능도 확인해야 한다.
모든 오픈소스 모델이 한국어에 강한 것은 아니다.
영어 답변은 괜찮은데 한국어 설명이 어색하거나, 한국어 질문 이해력이 떨어질 수 있다.
따라서 우리 업무에 맞는 질문으로 직접 테스트해야 한다.
4. Ollama로 로컬 LLM 실행하기
Ollama는 로컬에서 LLM을 쉽게 실행할 수 있게 도와주는 도구다.
처음 로컬 AI를 실습할 때 많이 사용한다.
Ollama의 장점은 단순하다.
- 설치가 비교적 쉽다.
- 모델 다운로드와 실행이 간단하다.
- 터미널에서 바로 질문할 수 있다.
- 로컬 API 서버처럼 사용할 수 있다.
- 여러 모델을 쉽게 바꿔가며 테스트할 수 있다.
Ollama를 사용하면 보통 다음 흐름으로 진행한다.
1. Ollama 설치
2. 사용할 모델 선택
3. 모델 다운로드 및 실행
4. 터미널에서 질문
5. 필요하면 API로 호출
예를 들어 터미널에서 다음처럼 실행할 수 있다.
ollama run llama3
그러면 모델을 내려받고 실행한 뒤 대화할 수 있다.
>>> REST API와 GraphQL의 차이를 설명해줘.
이렇게 하면 로컬 모델이 답변을 생성한다.
Ollama가 편한 이유는 모델 실행 서버를 따로 복잡하게 구성하지 않아도 된다는 점이다.
또 로컬 API 형태로 호출할 수도 있다.
예를 들어 백엔드에서 HTTP 요청을 보내 로컬 모델을 사용할 수 있다.
async function askLocalModel(prompt) {
const response = await fetch("http://localhost:11434/api/generate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "llama3",
prompt,
stream: false
})
});
const data = await response.json();
return data.response;
}
이 코드는 개념 설명용 예시다.
흐름은 다음과 같다.
Node.js 백엔드
→ localhost의 Ollama API 호출
→ 로컬 모델 응답 수신
→ 서비스에서 사용
Ollama를 사용하면 로컬 AI를 API처럼 다루는 감을 잡기 좋다.
다만 운영 서비스에 그대로 쓰기 전에는 다음을 확인해야 한다.
- 동시 요청을 얼마나 처리할 수 있는가
- 응답 속도는 충분한가
- 모델이 메모리에 안정적으로 올라가는가
- 서버 재시작 시 모델이 자동으로 준비되는가
- 로그와 모니터링은 어떻게 할 것인가
- 접근 권한은 어떻게 제한할 것인가
개발 PC 실습과 운영 서버 배포는 다르다.
Ollama는 시작하기 쉽지만, 운영에서는 별도의 안정성 검토가 필요하다.
5. LM Studio로 로컬 모델 테스트하기
LM Studio는 GUI 기반으로 로컬 LLM을 실행하고 테스트할 수 있는 도구다.
터미널 명령어에 익숙하지 않은 사람도 쉽게 사용할 수 있다.
LM Studio의 장점은 다음과 같다.
- 화면에서 모델을 검색하고 내려받을 수 있다.
- 채팅 UI로 바로 테스트할 수 있다.
- 모델별 응답 품질을 비교하기 쉽다.
- 로컬 서버 모드로 API 호출도 가능하다.
- 개발자가 아닌 구성원에게 시연하기 쉽다.
예를 들어 다음 흐름으로 사용할 수 있다.
1. LM Studio 설치
2. 모델 검색
3. 모델 다운로드
4. Chat 화면에서 질문 테스트
5. Server 모드 실행
6. 로컬 API 호출 테스트
LM Studio는 모델 테스트에 특히 좋다.
예를 들어 같은 질문을 여러 모델에 던져볼 수 있다.
질문:
고객 문의를 3문장으로 요약해줘.
모델 A:
요약은 자연스럽지만 개인정보를 포함함
모델 B:
요약은 짧지만 핵심이 빠짐
모델 C:
한국어는 자연스럽지만 응답이 느림
이렇게 비교해보면 어떤 모델이 우리 업무에 적합한지 감을 잡을 수 있다.
LM Studio의 로컬 서버 모드를 사용하면 애플리케이션에서 API처럼 호출할 수도 있다.
우리 백엔드
→ LM Studio 로컬 서버
→ 로컬 모델 응답
다만 LM Studio는 개인 개발 환경에서 실험하고 비교하는 데 특히 유용하다.
운영 서버에서 장기간 안정적으로 돌리는 용도로는 별도 검토가 필요하다.
LM Studio를 사용할 때 확인하면 좋은 항목은 다음과 같다.
- 모델이 사용하는 메모리
- 응답 속도
- 한국어 답변 품질
- 코드 이해력
- 긴 입력 처리 능력
- 로컬 서버 API 호환성
초보자에게는 Ollama와 LM Studio를 함께 사용해보는 것을 추천한다.
Ollama:
터미널과 API 실습에 좋음
LM Studio:
GUI 테스트와 모델 비교에 좋음
6. llama.cpp는 무엇인가
llama.cpp는 로컬에서 Llama 계열 모델을 실행하는 데 많이 사용되는 오픈소스 프로젝트다.
Ollama나 LM Studio보다 조금 더 낮은 수준의 도구라고 볼 수 있다.
초보자에게는 처음부터 llama.cpp를 직접 다루는 것이 어려울 수 있다.
하지만 로컬 AI 생태계를 이해하려면 이름은 알아두는 것이 좋다.
llama.cpp의 특징은 다음과 같다.
- C/C++ 기반으로 구현되어 가볍다.
- CPU에서도 모델을 실행할 수 있다.
- 다양한 양자화 모델을 실행할 수 있다.
- 여러 로컬 LLM 도구의 기반 기술로 활용된다.
- 서버 모드로 API처럼 사용할 수도 있다.
여기서 양자화라는 용어가 나온다.
양자화는 모델의 숫자 표현을 줄여서 메모리 사용량을 낮추는 방식이다.
예를 들어 원래 모델이 큰 메모리를 필요로 한다면, 양자화 모델은 더 적은 메모리로 실행할 수 있다.
원본 모델:
메모리 사용량 큼, 품질 좋음
양자화 모델:
메모리 사용량 작음, 실행 쉬움, 품질은 약간 떨어질 수 있음
양자화는 모델의 가중치 숫자 표현을 줄여 더 적은 메모리로 실행할 수 있게 만드는 기법이다.
로컬 AI에서는 큰 모델을 개인 PC나 작은 서버에서 실행하기 위해 자주 사용한다.
로컬 모델 파일에서 Q4, Q5, Q8 같은 표현을 볼 수 있다.
Q4:
더 가볍고 빠르지만 품질 손실이 있을 수 있음
Q8:
더 많은 메모리를 쓰지만 품질이 상대적으로 좋을 수 있음
정확한 차이는 모델과 환경에 따라 다르다.
처음에는 너무 깊게 들어가지 않아도 된다.
중요한 것은 이것이다.
로컬 AI에서는 모델 크기와 양자화 수준이 실행 가능 여부와 품질에 큰 영향을 준다.
Ollama나 LM Studio를 쓰더라도 내부적으로 이런 개념을 이해하면 모델 선택이 쉬워진다.
7. 모델 다운로드와 실행
로컬 AI를 사용하려면 먼저 모델을 다운로드해야 한다.
모델은 보통 수 GB에서 수십 GB까지 크기가 다양하다.
작은 모델:
몇 GB 수준
중간 모델:
수 GB에서 10GB 이상
큰 모델:
수십 GB 이상 가능
따라서 저장공간을 확인해야 한다.
여러 모델을 테스트하다 보면 디스크 공간이 빠르게 줄어든다.
모델 A:
4GB
모델 B:
8GB
모델 C:
20GB
합계:
32GB 이상 사용
모델을 다운로드할 때는 다음을 확인해야 한다.
- 모델 크기
- 양자화 형식
- 한국어 성능
- 코드 특화 여부
- 라이선스
- 필요한 메모리
- 실행 도구와 호환되는지
모델 라이선스도 중요하다.
오픈소스 모델이라고 해서 모두 상업적 사용이 자유로운 것은 아니다.
사내 도구나 서비스에 적용할 계획이 있다면 라이선스를 반드시 확인해야 한다.
개인 테스트:
비교적 자유롭게 실험 가능
사내 업무 도구:
라이선스 확인 필요
외부 사용자 서비스:
상업적 사용 가능 여부 반드시 확인
모델 실행 후에는 몇 가지 기본 테스트를 해보는 것이 좋다.
- 한국어 질문에 자연스럽게 답하는가
- 업무 도메인 용어를 이해하는가
- 요약을 잘하는가
- 지시한 형식을 지키는가
- JSON 응답을 잘 만드는가
- 긴 입력을 처리할 수 있는가
- 모르면 모른다고 답할 수 있는가
예를 들어 다음 질문으로 테스트할 수 있다.
아래 고객 문의를 3문장 이내로 요약해줘.
고객 문의:
하트를 충전했는데 반영이 안 됩니다.
결제 문자는 받았고 카드 승인도 된 것 같습니다.
언제 처리되는지 알고 싶습니다.
또는 RAG 용도로 쓸 모델이라면 다음처럼 테스트한다.
아래 참고 문서에 있는 내용만 사용해서 답변해줘.
문서에 없는 내용은 "문서에서 확인할 수 없습니다"라고 답해줘.
참고 문서:
환불은 하트 사용 전 상태에서만 가능하다.
질문:
하트를 이미 사용했는데 환불할 수 있나요?
이런 테스트를 통해 모델이 지시를 잘 따르는지 확인할 수 있다.
8. API 서버로 로컬 모델 호출하기
로컬 LLM을 실무에 활용하려면 API 형태로 호출할 수 있어야 한다.
터미널에서 질문하는 것만으로는 서비스와 연결하기 어렵다.
API 서버 형태로 만들면 기존 백엔드와 연결할 수 있다.
프론트엔드
→ 백엔드
→ 로컬 LLM API 서버
→ 로컬 모델
→ 응답 반환
예를 들어 로컬 AI 서버를 다음 주소로 실행한다고 해보자.
http://localhost:11434
백엔드는 이 서버에 요청을 보낸다.
async function askLocalLLM(question) {
const response = await fetch("http://localhost:11434/api/generate", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "llama3",
prompt: question,
stream: false
})
});
if (!response.ok) {
throw new Error("Local LLM request failed");
}
const data = await response.json();
return data.response;
}
이제 서비스 코드에서는 클라우드 AI와 비슷하게 로컬 모델을 호출할 수 있다.
async function summarizeWithLocalAI(message) {
const prompt = `
아래 문의를 3문장 이내로 요약해줘.
문의:
${message}
`;
return await askLocalLLM(prompt);
}
하지만 운영 환경에서는 더 많은 처리가 필요하다.
- timeout 설정
- 에러 처리
- 요청 길이 제한
- 동시 요청 제한
- 로그 기록
- 응답 검증
- 접근 권한 제한
로컬 LLM API 서버를 내부망에서 운영한다면 외부에서 접근할 수 없게 막아야 한다.
나쁜 구조:
0.0.0.0으로 열고 인증 없이 접근 허용
좋은 구조:
내부망에서만 접근
인증 또는 네트워크 제한 적용
호출 가능한 서비스 제한
로컬 AI도 하나의 API 서비스다.
따라서 일반 백엔드 서비스처럼 보안과 운영을 설계해야 한다.
9. 로컬 AI를 백엔드에 연결하는 기본 구조
로컬 AI를 서비스에 붙일 때는 직접 모델 호출 코드를 여기저기 넣지 않는 것이 좋다.
클라우드 AI와 마찬가지로 중간 계층을 두는 것이 좋다.
서비스 코드
→ AI Service Layer
→ Local LLM Client
→ 로컬 LLM API 서버
예를 들어 코드 구조는 다음과 같이 나눌 수 있다.
src/
services/
ai/
aiService.ts
localLlmClient.ts
cloudAiClient.ts
modelRouter.ts
promptBuilder.ts
responseValidator.ts
각 파일의 역할은 다음과 같다.
| 구성 요소 | 역할 |
|---|---|
aiService | AI 기능의 공통 진입점 |
localLlmClient | 로컬 모델 호출 |
cloudAiClient | 클라우드 AI 호출 |
modelRouter | 로컬과 클라우드 중 선택 |
promptBuilder | 기능별 프롬프트 생성 |
responseValidator | 응답 형식 검증 |
이 구조를 사용하면 나중에 하이브리드 AI로 확장하기 쉽다.
예를 들어 민감 정보가 포함된 요청은 로컬 모델로 보내고, 일반 요청은 클라우드 모델로 보낼 수 있다.
async function generateAnswer({input, sensitivity, taskType}) {
const prompt = buildPrompt(taskType, input);
if (sensitivity === "high") {
return await localLlmClient.generate(prompt);
}
return await cloudAiClient.generate(prompt);
}
이 구조의 장점은 다음과 같다.
- 서비스 코드가 특정 모델에 직접 묶이지 않는다.
- 로컬 모델과 클라우드 모델을 쉽게 교체할 수 있다.
- 공통 로그와 비용 추적을 적용할 수 있다.
- 응답 검증 로직을 재사용할 수 있다.
- fallback 구조를 만들기 쉽다.
처음에는 단순한 함수 하나로 시작해도 된다.
하지만 기능이 늘어날수록 AI 호출 계층을 분리하는 것이 좋다.
10. 로컬 LLM 실행 시 자주 겪는 문제
로컬 LLM을 처음 실행하면 여러 문제가 생길 수 있다.
첫 번째는 모델이 너무 느린 문제다.
질문 하나에 답변이 30초 이상 걸림
원인은 다양하다.
- CPU만 사용 중
- 모델이 너무 큼
- 양자화 수준이 무거움
- RAM 또는 VRAM 부족
- 다른 프로그램이 자원을 사용 중
이 경우 작은 모델이나 더 가벼운 양자화 모델을 사용해볼 수 있다.
두 번째는 모델이 메모리에 올라가지 않는 문제다.
out of memory
model load failed
모델 크기가 하드웨어보다 큰 경우다.
해결 방법은 다음과 같다.
- 더 작은 모델 사용
- 더 낮은 메모리 요구 모델 사용
- 양자화 모델 사용
- GPU가 있다면 GPU 사용 설정 확인
- 불필요한 프로그램 종료
세 번째는 한국어 답변 품질 문제다.
모델에 따라 한국어 답변이 어색하거나 부정확할 수 있다.
- 영어로는 잘 답하지만 한국어는 어색함
- 한국어 질문 의도를 잘못 이해함
- 업무 도메인 용어를 잘 모름
이 경우 한국어 성능이 좋은 모델을 비교하거나, 프롬프트에 용어 설명을 넣어야 한다.
네 번째는 지시를 잘 따르지 않는 문제다.
JSON으로 답하라고 했는데 설명문을 붙임
3문장 이내라고 했는데 길게 답함
문서에 없는 내용을 추정함
이 경우 프롬프트를 더 명확히 하거나, 응답 검증과 재요청 로직을 둬야 한다.
다섯 번째는 동시 요청 처리 문제다.
개발 PC에서는 한 명이 쓰기 때문에 괜찮아 보일 수 있다.
하지만 여러 명이 동시에 쓰면 응답 대기가 길어진다.
사용자 A 요청 처리 중
사용자 B 요청 대기
사용자 C 요청 대기
이런 경우 큐, 동시성 제한, 서버 확장이 필요하다.
11. 개발 PC와 운영 서버는 다르다
로컬 AI를 개발 PC에서 실행하는 것과 운영 서버로 제공하는 것은 다르다.
개발 PC에서는 다음 정도만 확인하면 된다.
- 모델이 실행되는가
- 답변 품질이 쓸 만한가
- 속도가 어느 정도인가
- API 호출이 가능한가
하지만 운영 서버에서는 더 많은 항목이 필요하다.
- 서버 재시작 후 자동 실행되는가
- 모델이 정상 로드되었는지 확인할 수 있는가
- Health Check API가 있는가
- 요청 timeout이 설정되어 있는가
- 동시 요청 제한이 있는가
- 로그와 모니터링이 있는가
- 장애 시 재시작 정책이 있는가
- 접근 권한이 제한되어 있는가
예를 들어 로컬 AI 서버를 내부 팀에서 사용한다고 해보자.
개발팀 문서 검색 AI
→ 내부 LLM 서버 호출
→ 응답 반환
이때 서버가 죽으면 모든 사용자가 AI 기능을 사용할 수 없다.
따라서 운영 서버에서는 다음이 필요하다.
- systemd, Docker, Kubernetes 등을 이용한 프로세스 관리
- 로그 수집
- CPU, RAM, GPU 사용률 모니터링
- 요청 수와 응답 시간 모니터링
- 장애 알림
- 모델 버전 관리
개발 PC에서 잘 된다고 운영에서도 잘 되는 것은 아니다.
로컬 AI를 서비스로 제공하려면 일반 백엔드 서비스처럼 운영 설계를 해야 한다.
12. Docker로 로컬 AI 환경을 관리하는 이유
로컬 AI 환경은 설치 요소가 많을 수 있다.
- 실행 도구
- 모델 파일
- Python 또는 Node.js 런타임
- GPU 드라이버
- CUDA 관련 라이브러리
- API 서버 코드
개발자마다 환경이 다르면 문제가 생긴다.
내 PC에서는 됐는데 서버에서는 안 됨
개발자 A는 실행되는데 개발자 B는 실패
라이브러리 버전이 달라 결과가 다름
이런 문제를 줄이기 위해 Docker를 사용할 수 있다.
Docker를 사용하면 실행 환경을 컨테이너로 묶을 수 있다.
애플리케이션 코드
+ 실행 환경
+ 의존성
→ Docker 이미지
로컬 AI 서버도 Docker로 관리할 수 있다.
docker run
→ 로컬 LLM 서버 실행
→ 백엔드에서 API 호출
Docker를 사용하면 다음 장점이 있다.
- 개발 환경과 서버 환경 차이를 줄일 수 있다.
- 배포가 쉬워진다.
- 버전 관리가 쉬워진다.
- 재시작과 로그 관리가 편해진다.
- 여러 모델 서버를 분리해서 운영할 수 있다.
다만 GPU를 사용하는 경우에는 추가 설정이 필요할 수 있다.
컨테이너가 GPU를 사용할 수 있도록 런타임과 드라이버 구성이 맞아야 한다.
초보자는 처음부터 Docker와 GPU까지 한 번에 구성하려고 하기보다, 단계적으로 접근하는 것이 좋다.
1. 개발 PC에서 도구로 모델 실행
2. 로컬 API 호출 테스트
3. Docker로 백엔드와 연결
4. GPU 서버에서 실행 테스트
5. 운영 모니터링 추가
13. 로컬 LLM 테스트 체크리스트
로컬 모델을 다운로드하고 실행했다면, 단순히 “답변이 나온다”로 끝내면 안 된다.
우리 업무에 쓸 수 있는지 확인해야 한다.
다음 체크리스트를 사용할 수 있다.
| 항목 | 확인할 내용 |
|---|---|
| 실행 가능 여부 | 모델이 내 PC나 서버에서 정상 실행되는가 |
| 응답 속도 | 질문 후 답변이 업무에 쓸 수 있을 만큼 빠른가 |
| 메모리 사용량 | RAM 또는 VRAM 사용량이 감당 가능한가 |
| 한국어 품질 | 한국어 질문과 답변이 자연스러운가 |
| 도메인 이해 | 우리 서비스 용어를 어느 정도 이해하는가 |
| 요약 품질 | 긴 내용을 핵심 위주로 줄일 수 있는가 |
| JSON 응답 | 지정한 형식을 잘 지키는가 |
| RAG 적합성 | 참고 문서만 보고 답할 수 있는가 |
| 환각 경향 | 모르는 내용을 지어내지 않는가 |
| 긴 입력 처리 | 문서나 로그를 어느 정도 길이까지 처리하는가 |
| 동시 요청 | 여러 요청이 들어오면 어떻게 되는가 |
| API 연동 | 백엔드에서 호출하기 쉬운가 |
| 라이선스 | 사내 또는 상업적 사용에 문제가 없는가 |
예를 들어 다음 테스트 세트를 만들 수 있다.
1. 고객 문의 요약 10건
2. 장애 로그 분석 10건
3. 문서 기반 질문 20건
4. JSON 분류 요청 20건
5. 모르는 질문 10건
6. 긴 입력 5건
7. 한국어 도메인 용어 질문 10건
각 테스트에서 결과를 기록한다.
- 답변 품질
- 응답 시간
- 형식 준수 여부
- 환각 여부
- 메모리 사용량
이렇게 해야 모델을 바꿨을 때 비교할 수 있다.
14. 로컬 AI 환경을 처음 구성할 때 추천 순서
처음 로컬 AI 환경을 구성할 때는 너무 어렵게 시작하지 않는 것이 좋다.
추천 순서는 다음과 같다.
1. Ollama 또는 LM Studio 설치
2. 작은 모델 하나 실행
3. 한국어 질문 테스트
4. 요약, 분류, JSON 응답 테스트
5. 로컬 API 서버 호출 테스트
6. 간단한 백엔드 함수와 연결
7. RAG용 문서 검색과 연결
8. 응답 속도와 메모리 사용량 측정
9. 필요한 경우 더 큰 모델 테스트
10. 운영 서버 배포 가능성 검토
처음부터 대형 모델이나 GPU 서버를 준비하려고 하면 부담이 커진다.
먼저 작은 모델로 전체 흐름을 이해하는 것이 좋다.
작은 모델로 확인할 것:
- 로컬에서 모델이 실행되는 흐름
- API로 호출하는 방식
- 프롬프트에 따른 답변 변화
- 응답 속도와 품질의 차이
이후에 더 큰 모델을 테스트한다.
큰 모델로 확인할 것:
- 품질이 얼마나 좋아지는가
- 응답 속도가 얼마나 느려지는가
- 메모리 사용량이 얼마나 늘어나는가
- 실제 업무에 쓸 가치가 있는가
로컬 AI는 실험과 측정이 중요하다.
모델 이름만 보고 판단하기보다, 우리 데이터와 우리 업무 질문으로 테스트해야 한다.
15. 정리
로컬 LLM 실행 환경을 만들려면 모델, 실행 도구, 하드웨어, API 호출 구조를 이해해야 한다.
Ollama는 로컬 LLM을 빠르게 실행하고 API로 호출해보기 좋은 도구다.
터미널에서 모델을 실행하거나, 로컬 HTTP API로 백엔드와 연결할 수 있다.
LM Studio는 GUI 기반으로 모델을 검색하고 테스트하기 좋다.
여러 모델을 비교하거나, 개발자가 아닌 사람에게 시연할 때도 편리하다.
llama.cpp는 로컬 LLM 실행 생태계의 중요한 기반 기술이다.
특히 양자화 모델과 CPU 실행, 가벼운 실행 환경을 이해하는 데 도움이 된다.
로컬 모델을 다운로드할 때는 모델 크기, 양자화 수준, 한국어 성능, 코드 특화 여부, 라이선스, 필요한 메모리를 확인해야 한다.
로컬 AI를 실무에 연결하려면 API 서버 형태로 호출할 수 있어야 한다.
백엔드에서는 로컬 LLM을 직접 호출하되, timeout, 에러 처리, 응답 검증, 접근 제한을 함께 설계해야 한다.
개발 PC에서 모델이 잘 실행된다고 운영 환경에서도 바로 쓸 수 있는 것은 아니다.
운영 서버에서는 동시 요청, 장애 대응, 모니터링, 로그, 모델 버전 관리가 필요하다.
이 장에서 기억해야 할 핵심은 하나다.
로컬 LLM 실행 환경은 “모델을 한 번 실행해보는 것”에서 끝나지 않는다.
서비스에 연결하려면 API 구조, 하드웨어 한계, 보안, 운영 관리까지 함께 설계해야 한다.
22장 핵심 요약
| 핵심 내용 | 설명 |
|---|---|
| 로컬 LLM은 직접 실행해보는 것이 중요하다 | 개념만 보는 것보다 Ollama나 LM Studio로 작은 모델을 실행해보면 구조를 빨리 이해할 수 있다. |
| 로컬 LLM은 모델이 내 환경 안에서 실행된다 | 클라우드 AI와 달리 개발 PC, 사내 서버, 내부망 서버에서 모델을 직접 실행한다. |
| 실행 전 하드웨어를 확인해야 한다 | CPU, RAM, GPU, VRAM, 저장공간이 모델 실행 가능 여부와 속도에 영향을 준다. |
| Ollama는 시작하기 쉽다 | 모델 다운로드, 실행, 로컬 API 호출을 간단하게 실습할 수 있다. |
| LM Studio는 GUI 테스트에 좋다 | 모델 비교, 채팅 테스트, 로컬 서버 실행을 화면에서 쉽게 할 수 있다. |
| llama.cpp는 로컬 LLM 생태계의 기반 기술이다 | CPU 실행, 양자화 모델, 가벼운 추론 환경을 이해하는 데 도움이 된다. |
| 모델 다운로드 시 라이선스를 확인해야 한다 | 사내 도구나 외부 서비스에 사용할 계획이 있다면 상업적 사용 가능 여부를 봐야 한다. |
| API 서버 형태로 호출할 수 있어야 한다 | 로컬 모델을 서비스에 붙이려면 백엔드에서 HTTP API처럼 호출할 수 있어야 한다. |
| AI 호출 계층을 분리하는 것이 좋다 | localLlmClient, cloudAiClient, modelRouter를 나누면 하이브리드 구조로 확장하기 쉽다. |
| 로컬 실행에서는 속도와 메모리 문제가 자주 발생한다 | 모델 크기, 양자화 수준, GPU 사용 여부에 따라 성능이 크게 달라진다. |
| 개발 PC와 운영 서버는 다르다 | 운영 환경에서는 자동 실행, Health Check, 동시 요청, 로그, 모니터링이 필요하다. |
| Docker는 환경 차이를 줄이는 데 도움이 된다 | 실행 환경과 의존성을 묶어 배포와 관리를 쉽게 할 수 있다. |
| 테스트 체크리스트가 필요하다 | 한국어 품질, JSON 응답, RAG 적합성, 환각 경향, 응답 속도, 라이선스를 확인해야 한다. |